/* eslint-disable no-unused-vars */
var pkgByCid = {
}
function getQueryString (url, name) {
  var reg = new RegExp('(^|&)' + name + '=([^&]*)(&|$)', 'i')
  var r = url.substr(1).match(reg)
  if (r != null) {
    return unescape(r[2])
  }
  return null
}
function getCidByPkg (pkg_id) {
  var keys = Object.keys(pkgByCid)
  return keys.find(item => {
    if (pkgByCid[item].includes(pkg_id)) {
      return item
    }
  })
}
function getQueryValue (url, queryName) {
  var reg = new RegExp('(^|&)' + queryName + '=([^&]*)(&|$)', 'i')
  var r = url.split('?')[1].match(reg)
  if (r != null) {
    return decodeURI(r[2])
  } else {
    return null
  }
}
function invokeAPi () {
  var a = Array.prototype.slice.call(arguments)
  return window.xz_call && window.xz_call.apply(this, a)
}
function invokeAsyncAPi () {
  var a = Array.prototype.slice.call(arguments)
  return new Promise((resolve) => {
    a.push((...args) => resolve(args.length > 1 ? args : args[0]))
    window.xz_call && window.xz_call.apply(this, a)
  })
}
function registerInformApi (apiName, cb) {
  (window.xz_register && window.xz_register(apiName, cb)) || (window[apiName] = cb)
}
/**
 * @param reportId {Number} 埋点id
 * @param info { Object | null } 更多信息
 * @return null
*/
const reportInfoApi = (reportId, info) => {
  if (info) {
    return invokeAsyncAPi('xz_submit_info_report', reportId, JSON.stringify(info))
  }
  return invokeAsyncAPi('fq_substat_action', reportId)
}
/**
     * ajax请求
     * @param data
     * @returns {Object}options
     */
// eslint-disable-next-line sonarjs/cognitive-complexity
function ajax (options) {
  /**
   * 传入方式默认为对象
   * */
  options = options || {}
  /**
   * 默认为GET请求
   * */
  options.type = (options.type || 'GET').toUpperCase()
  /**
   * 返回值类型默认为json
   * */
  options.dataType = options.dataType || 'json'
  /**
   * 默认为异步请求
   * */
  options.async = options.async !== false
  /**
   * 对需要传入的参数的处理
   * */
  var params = getParams(options.data)

  /**
   * 请求头
   */
  var contentType = options.contentType || 'application/json'

  var xhr
  /**
   * 创建一个 ajax请求
   * W3C标准和IE标准
   */
  if (window.XMLHttpRequest) {
    /**
     * W3C标准
     * */
    xhr = new XMLHttpRequest()
  } else {
    /**
     * IE标准
     * @type {ActiveXObject}
     */
    xhr = new window.ActiveXObject('Microsoft.XMLHTTP')
  }
  xhr.onreadystatechange = function () {
    if (xhr.readyState === 4) {
      var status = xhr.status
      if (status >= 200 && status < 300) {
        // options.success && options.success(options.dataType === 'json' ? JSON.parse(res || '{}') : res, xhr.responseXML)
        options.success && options.success(xhr.response, xhr)
      } else {
        options.error && options.error(xhr)
      }
    }
  }

  xhr.responseType = options.dataType

  if (options.type === 'GET') {
    var p = ''
    if (params) {
      p = /\?/.test(options.url) ? '&' : '?'
      p += params
    }
    xhr.open('GET', options.url + p, options.async)
    Object.keys(options.headers || {}).map(key => {
      xhr.setRequestHeader(key, options.headers[key])
    })
    xhr.send(null)
  } else if (options.type === 'POST') {
    if (!contentType.match('application/x-www-form-urlencoded')) {
      params = JSON.stringify(options.data)
    }
    /**
     *打开请求
    * */
    xhr.open('POST', options.url, options.async)
    /**
     * POST请求设置请求头
     * */
    xhr.setRequestHeader('Content-Type', contentType)
    Object.keys(options.headers || {}).map(key => {
      xhr.setRequestHeader(key, options.headers[key])
    })
    /**
     * 发送请求参数
     */
    xhr.send(params)
  }
  return xhr
}
/**
     * 对象参数的处理
     * @param data
     * @returns {string}
     */
function getParams (data) {
  if (!data) return ''
  var arr = []
  for (var param in data) {
    arr.push(encodeURIComponent(param) + '=' + encodeURIComponent(data[param]))
  }
  return arr.join('&')
}
